【Chaliceに入門してみた】LambdaとAPI Gatewayを手動で構築して消耗していた過去の私へ
こんにちは。AWS Loftが大好きな佐伯、改めKyoです。(まさか社内に佐伯さんが3名もいるとは…)
AWS Loftでのハンズオンに参加してきたのでレポします。
AWS Amplify & Chalice ハンズオン 〜怠惰なプログラマ向けお手軽アプリ開発手法〜
Chaliceとは?
ChaliceはAWS Lambdaを使ったサーバレスアプリケーションを、Pythonで構築するためのマイクロフレームワークで、以下が可能です。
- コマンドラインによるアプリの構築、デプロイおよび管理
- API Gatewayをはじめ、S3, SNS, SQSといったAWSサービスとのインテグレーション
- IAM ポリシーの自動生成
Python Serverless Microframework for AWS
ちなみにChaliceとは聖杯のことです。ChaliceはPythonのマイクロウェブフレームワークであるFlaskライクな構成になっており、聖杯とフラスコ、器つながりなのかーと想像(妄想?)が膨らみますね。
使うと何が嬉しいの?
LambdaとAPI Gatewayの組み合わせはサクっとAPIを実装できてとても便利なのですが、どうせなら関連するコンポーネントをまとめて構築や管理をしたくなるのが人情というもの。
Sereverless Frameworkという方法もあるのですが、 こちらはAWS以外にもAzureやGCPへ対応しており、機能も豊富ということでちょっとだけ学習が大変。
「シンプルにLambdaとAPI GatwayでAPIを構築&管理したいだけなんだけどなー。。」
そんな時がChaliceの出番です。
なお、ハンズオンのページには以下のような記載がありました。
また、少ない操作で、一分以内にサーバーレスな RESTful API をデプロイできる Python 製のアプリケーションフレームワーク、「Chalice」もあります。
ほんとに一分以内にデプロイできるのかやってみた
結論から述べると、一分以内のデプロイは可能だと思います。
ただし、環境構築がうまくいっていることが前提です。
というのも、私の場合、準備のAWS CLIの設定がうまくいきませんでした。もう少し詳しく言うと、CLIのインストール自体は問題なかったものの、credentialファイルを作れない状態でした。
これはハマりそうだな、ということでサポートの方にヘルプを求めたところ、一度touchして後から中身を書き加えるという方法でうまくいきました。サポートの方が言うには、Chaliceそのものよりも環境構築でハマるパターンが多いようです。
「困ったらその場で聞ける」はハンズオンの最大のメリットですね。
デプロイまでの手順は以下です。(なお、作業はvirtualenvによるPython 3.7.3の仮想環境で行いました。)
Chaliceのインストール
$ pip install chalice
プロジェクトの作成
$ chalice new-project helloworld $ cd helloworld
エディタで app.pyを編集(今回は確認)
from chalice import Chalice app = Chalice(app_name='helloworld') @app.route('/') def index(): return {'hello': 'world'}
デプロイ
$ chalice deploy
以上。URLが返ってくるので、curlで確認します。
マネジメントコンソールを覗いてみると以下が生成されています。
なお、いつもLambda用のIAMロールにどこまでのポリシーをつけるものか…と悩んでいたのですが、Chaliceでは、呼び出す(AWSの)APIを判断し、最小のポリシーををつけてくれるようです。便利!!
なお、片付けは以下のコマンドから。
$ chalice delete
一発で綺麗さっぱり作ったものが削除されます。
その他のハンズオンコンテンツ
上記で作ったAPIをベースにアメリカの都市名から州名を返すメソッドを追加し、それにエラーレスポンスを実装したり、PUTを追加したりと内容盛りだくさんでした。
また、私は今回時間の関係で省略したのですが、以下のような内容もありました。
- API キーと認可機能
- Amazon S3 へのファイルアップロード処理パターン
- 画像認識 API
終わりに
LambdaとAPI Gatwayを使ったAPIをPythonで高速に構築できるマイクロフレーム「Chalice」、シンプルなAPI開発の際には検討してみてはいかがでしょうか?
以上、Kyoでした。